﻿Public Class CustomerManager
    Inherits CoreClass

    ' Gan gia tri cho bien MenuID de kiem tra quyen cua ng dung, gia tri nay lay trog DB va dc fix
    Dim chkMenu As Integer = getIDMenu(10)

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            ' Set sự kiện submit cho nút chỉ định
            Page.Form.DefaultButton = btnSearch.UniqueID
            ' Luôn check quyền khi load trang
            chkPms((CInt(Session("GroupId").ToString())), chkMenu)
            If Not Page.IsPostBack Then
                If chkView = 1 Then
                    loadStt()
                    BindGrid()
                Else
                    'MsgBox(chkView & chkUpdate & chkDelete)
                    objAlert.ErrorBox(Page, "Bạn không có quyền truy xuất trang này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
                    'Response.Redirect("/Default.aspx")
                End If
            End If
        Catch ex As Exception
            Response.Redirect("/Inside/xLogin.aspx?redirect=" & Request.Url.PathAndQuery.Replace("?", "|"))
        End Try
    End Sub

#Region "Các sự kiện của grid và Button"

    ' Tìm Kiếm
    Private Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click
        ' Kiểm tra xem có quyền xem hay không
        If Not chkView = 1 Then
            objAlert.ErrorBox(Page, "Bạn không có quyền tìm kiếm. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            Exit Sub
        End If
        BindGrid()
    End Sub

    ' Tạo các dòng khác màu khi data đc fill vào bảng
    Private Sub gridMenu_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gridMenu.RowCreated
        'Add CSS class on normal row.
        If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Normal Then
            e.Row.CssClass = "normal"
        End If

        'Add CSS class on alternate row.
        If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Alternate Then
            e.Row.CssClass = "alt"
        End If
    End Sub

    ' Gọi lệnh Delete sau khi click button Delete trên Grid View
    Private Sub gridMenu_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles gridMenu.RowDeleting
        ' Kiểm tra xem có quyền delete hay không
        If Not chkDelete = 1 Then
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            e.Cancel = True
            Exit Sub
        End If

        Try
            Dim id As Integer
            id = Integer.Parse(gridMenu.DataKeys(e.RowIndex).Value.ToString)
            'If id = Session("UserId") Then
            '    objAlert.AlertBox(Page, "Bạn không thể xóa tài khoản của bạn, hãy liên hệ lại với Admin.")
            '    Exit Sub
            'End If
            Dim userName As String = gridMenu.Rows(e.RowIndex).Cells(1).Text.ToString()
            sql = "spi_CusDelete"

            dsSource.ConnectionString = ConnectionString
            dsSource.DeleteCommand = sql
            dsSource.DeleteCommandType = SqlDataSourceCommandType.StoredProcedure
            dsSource.DeleteParameters.Add("CusID", id)

            gridMenu.EditIndex = -1
            BindGrid()

            objFunction.writeLog(Session("UserId"), 0, "Xóa tài khoản khách hàng", userName)
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Bind lại dữ liệu khi chuyển trang
    Private Sub gridMenu_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gridMenu.PageIndexChanging
        BindGrid()
    End Sub

    ' Gọi lại hàm fill dữ liệu sau khi sắp xếp lại trên grid
    Private Sub gridMenu_Sorted(ByVal sender As Object, ByVal e As System.EventArgs) Handles gridMenu.Sorted
        BindGrid()
    End Sub

#End Region

#Region "Các hàm tự viết"

    ' Lấy dự liệu đưa vào Grid View
    Private Sub BindGrid()
        sql = "select * from Out_Customer as U (nolock) where 1 = 1 "

        If Not txtUsername.Text = "" Then
            sql &= " and U.CusUserName like '%" & txtUsername.Text & "%'"
        End If

        If Not txtPhone.Text = "" Then
            sql &= " and U.CusPhone like '%" & txtPhone.Text & "%'"
        End If

        If Not txtEmail.Text = "" Then
            sql &= " and U.CusEmail like '%" & txtEmail.Text & "%'"
        End If

        If Not txtFullname.Text = "" Then
            sql &= " and U.CusFullName like N'%" & txtFullname.Text & "%'"
        End If

        If Not txtIdentity.Text = "" Then
            sql &= " and U.CusIdCard like '%" & txtIdentity.Text & "%'"
        End If

        If Not txtAddress.Text = "" Then
            sql &= " and U.CusAddress like N'%" & txtAddress.Text & "%'"
        End If

        If Not (cbxStatus.SelectedValue = "-1" Or cbxStatus.SelectedValue = "") Then
            sql &= "and U.CusStatus = " & cbxStatus.SelectedValue
        End If
        sql &= " order by U.CusUserName desc"

        Try
            dsSource.ConnectionString = ConnectionString
            dsSource.SelectCommand = sql
            gridMenu.DataBind()
            If gridMenu.Rows.Count = 0 Then
                objAlert.AlertBox(Page, "Không tìm thấy dữ liệu phù hợp với yêu cầu của bạn, hãy thử lại.")
            End If
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Lấy dữ liệu vào ComboBox Status
    Private Sub loadStt()
        Try
            cbxStatus.DataTextField = "CodeDesc"
            cbxStatus.DataValueField = "CodeValue"
            cbxStatus.DataSource = objData.ExeDataset("spi_StatusGet")
            cbxStatus.DataBind()
            cbxStatus.Items.Insert(0, New ListItem("-- No Filter --", "-1"))
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Format Status trên Grid View
    Public Function getUserStt(ByVal stt As Integer) As String
        If stt = 1 Then
            Return "<span style=""font-weight:bold;color: #00CC00""><b>Hoạt động</b></span>"
        Else
            Return "<span style=""font-weight:bold;color: #FF0000""><b>Chưa kích hoạt</b></span>"
        End If
    End Function

    ' Format Link Edit Detail trên Grid View
    Public Function getUserEditLink(ByVal id As Integer) As String
        Return "<a class=""Astyle"" href='/Inside/Customer/CustomerUpdate.aspx?id=" & id & "'>Select</a>"
    End Function

    ' Kiểm tra dữ liệu nhập trên Form
    Public Function chkField() As Boolean
        Dim flag = True

        If txtUsername.Text = "" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy nhập giá trị cho mục Username.")
            Return flag
        End If
        If Not objFunction.IsAlphaNumeric(txtUsername.Text) Then
            flag = False
            objAlert.ErrorBox(Page, "Username chỉ bao gồm các chữ cái: A-Z, a-z, 0-9 và không có khoảng trống.")
            Return flag
        End If

        If txtFullname.Text = "" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy nhập tên đầy đủ của khách hàng.")
            Return flag
        End If

        If txtPhone.Text = "" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy nhập số điện thoại của khách hàng.")
            Return flag
        End If
        If Not objFunction.IsNumber(txtPhone.Text) Then
            flag = False
            objAlert.ErrorBox(Page, "Số điện thoại chỉ gồm chữ số: 0-9 và không có khoảng trống.")
            Return flag
        End If

        If txtIdentity.Text = "" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy nhập số chứng minh thư của khách hàng.")
            Return flag
        End If
        If Not objFunction.IsNumber(txtIdentity.Text) Then
            flag = False
            objAlert.ErrorBox(Page, "Số chứng minh thư chỉ gồm chữ số: 0-9 và không có khoảng trống.")
            Return flag
        End If

        If txtEmail.Text = "" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy nhập giá trị cho mục Email.")
            Return flag
        End If
        If Not objFunction.CheckEmailAddress(txtEmail.Text) Then
            flag = False
            objAlert.ErrorBox(Page, "Email chưa đúng định dạng.")
            Return flag
        End If

        If cbxStatus.SelectedValue = "" Or cbxStatus.SelectedValue = "-1" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy chọn giá trị Trạng Thái cho đúng.")
            Return flag
        End If

        ' Kiem tra xem ten user da co hay chua?
        sql = "spi_CusUserChkExist " & objFunction.FieldUniCk(txtUsername.Text)
        objDataRead.ExeReader(sql)
        If objDataRead.dataRead.Read Then
            objAlert.ErrorBox(Page, "Username này đã tồn tại trong hệ thống, hãy chọn tên khác.")
            flag = False
            Return flag
        End If

        Return flag
    End Function

    ' Show avatar small tren list User
    Public Function showAvatar(ByVal str As String) As String
        If str = "" Then
            Return "~/static/inSite/images/noAva.gif"
        Else
            Return "~/static/inSite/image/avatar/" & str
        End If
    End Function

#End Region






End Class